// import com.alibaba.druid.DbType;
// import com.alibaba.druid.sql.ast.SQLExpr;
// import com.alibaba.druid.sql.ast.SQLHint;
// import com.alibaba.druid.sql.ast.SQLReplaceable;
// import com.alibaba.druid.sql.ast.statement.SQLUpdateStatement;
// import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor;
// import com.alibaba.druid.sql.visitor.SQLASTVisitor;

// import java.util.ArrayList;
// import java.util.List;
#pragma once
#include "../../../../ast/SQLReplaceable.h"
#include "../../../../ast/statement/SQLUpdateStatement.h"
#include "OracleStatement.h"

class OracleUpdateStatement : virtual public SQLUpdateStatement, virtual public OracleStatement/*, virtual public SQLReplaceable*/
{
public:
  SQLHint_list_ptr hints;
  BOOL_ptr only;
  string_ptr alias;

  SQLExpr_list_ptr returningInto;

  OracleUpdateStatement();
  SHAREDOBJECT(OracleUpdateStatement);

  SQLExpr_list_ptr getReturningInto();

  void addReturningInto(SQLExpr_ptr returningInto);

  // @Override
  void accept0(SQLASTVisitor_ptr visitor);

  // @Override
  void accept0(OracleASTVisitor_ptr visitor);

  // @Override
  BOOL_ptr replace(SQLExpr_ptr expr, SQLExpr_ptr target);

  string_ptr getAlias();

  void setAlias(string_ptr alias);

  BOOL_ptr isOnly();

  void setOnly(BOOL_ptr only);

  int getHintsSize();

  SQLHint_list_ptr getHints();

  void setHints(SQLHint_list_ptr hints);

  // @Override
  bool equals(Object_ptr o);

  // @Override
  int hashCode();
};
